前言:
筆者本身的工作內容不包含建置或維護Kubernetes,不過程式部署後,不時遇到各項事件需確認,參數的設定也是一知半解,萌生認真認識Kubernetes的念頭,目標本系列文章可抵達Kubernetes冰山第3層,獲取CKA證照範圍的概念,內容以基本知識跟指令操作為主,讓開發者在已建置好的平台上,能有脈絡的釐清資訊
Kubernetes源自古希臘文,意指舵手或飛行員(logo如名是個舵),簡稱為K8s,簡單講是管理容器(containers)的平台,功能像是有自動化部署、自我修復、擴展等,在多主機/容器的大規模服務情境,除了有效確保服務不中斷,也便於掌握狀態等。設計上採用獨立部署服務,有著豐富的彈性及多項設置,伴隨而來是複雜不易上手的缺點,另外,部分功能,像是紀錄、監控、告警等,需透過外部的解決方案處理。(公有雲端平台像是AWS、GCP、Azure提供相關的託管服務,簡化管理)
由多個節點(node)組成叢集(cluster),架構組成分為二大部分:一、控制平台「Control Plane(舊稱:Master node)」,以及二、實際工作站(們)「 worker nodes」,另外還有其它的外掛(addon),像是有DNS, WEB UI, Nerwork plugins等
(註: node為實體的機器或是VM)
☑️ 控制平台 Control plane:負責確保狀態運作正確,確切來說執行了服務管理、規劃、回應API請求、容器排程及監控節點(node)/工作負載(workload)等, 內部細分有4個元件:
🗂️ 查看api server的設定
cat /etc/kubernetes/manifests/kube-apiserver.yaml
cat /etc/systemd/system/kube-apiserver.service
ps -aux | grep kube-apiserver
ETCD cluster: 資訊儲存站,kubernetes使用etcd(念法: et-see-dee)為其首選datastore,用以在分散式架構保持資料一致性,提供共用資料也紀錄整個叢集的狀態,故障時可利用此資訊備份的功能,進行復原作業
kube-scheduler: 工作調度站,當新增pod的時候,根據node規則及條件設定,排定application於nodes (實際執行者為kubelet)
🗂️ 查看kube-scheduler的設定
cat /etc/kubernetes/manifests/kube-scheduler.yaml
ps -aux | grep kube-scheduler
node-controller
為例:
🗂️ 查看 kube-controller-manager設定
cat /etc/kubernetes/manifests/kube-controller-manager.yaml
cat /etc/systemd/system/kube-controller-manager.service
ps -aux | grep kube-controller-manager
☑️ 工作節點 Worker nodes: 服務部署的位置,容器包裝於Pod部署於此,內部細分有3個元件:
🗂️ 查看kubelet的設定
ps -aux | grep kubelet
kube-proxy: 顧名思義為網路代理服務,負責叢集內外的網路通訊,存在於各個節點的程序,像是部署pod networking(internal virtual network),因此叢集內Pod之間互通,另外也能透過ip table,建立轉導到後台pod的規則等
container runtime: 負責運行容器,依據kubelet的命令管理,支持Docker、containerd及其它符合Container Runtime Interface (CRI)規範的runtime
💡 cluster建置可以白手起家,或透過建置工具
kubeadm
快速生成,使用Kubeadm的話,系統相關元件,會以pod形式,放在kube-system這個命名空間(namespace);其組態文件預設放在目錄:/etc/kubernetes/manifests/
底下